Необходимость обработки текстовой информации, вводимой человеком, возникает в самых разнообразных программных продуктах - от компьютерных игр до компиляторов. В большинстве случаев эта обработка осуществляется с использованием лексического и синтаксического анализаторов.
Поскольку написание лексического и синтаксического анализаторов на каком-либо алгоритмическом языке программирования - весьма трудоёмкий процесс и внутренняя структура анализаторов практически не зависит от синтаксиса обрабатываемого языка, то для построения анализаторов используются т.н. генераторы распознавателей. Генератор распознавателей представляет собой универсальное программное обеспечение, позволяющее по заданному формальному описанию некоторого языка автоматически получить для него лексический и синтаксический анализаторы.
Кроме лексического и синтаксического анализаторов, важными составными частями компилятора являются генератор промежуточного представления программы и модуль, обеспечивающий сохранение отладочной информации. Эти части имеют много общего для различных компиляторов и, поэтому, желательно их наличие в универсальном средстве проектирования компиляторов.
Разработанная система Unisan [1] может быть использована для создания компиляторов языков программирования высокого уровня (C, Pascal), описания аппаратуры (Verilog, Vhdl), а также для разбора любой структурированной текстовой информации, например, в формате XML.
Возможности и преимущества перед аналогичными продуктами:
Существует множество систем, предназначенных для решения подобных задач - Lex/Yacc, AntLR и др. Преимущество системы Unisan заключаются в том, что все перечисленные возможности не присутствуют одновременно в каком-либо аналогичном продукте. При создании системы Unisan учитывались пожелания разработчиков, использующих Unisan в реальных проектах.
Система Unisan позволяет работать с SLL1(k), k 1 - грамматиками, которые являются подмножеством LL(k). Объём памяти и время, затрачиваемое для работы и построения распознавателя для SLL1(k) - грамматики, линейно зависит от k, что позволяет эффективно использовать грамматики при k>1. Кроме этого, используется эвристический алгоритм факторизации синтаксических диаграмм, позволяющий в ряде случаев уменьшить k или даже привести грамматику к виду SLL1(k), если она не являлась такой в исходном виде. Из дополнительных возможностей отметим наличие механизма, позволяющего управлять потоком лексем во время разбора. Эта возможность упрощает реализацию, например, макроподстановок или включения файла в исходный текст (директива #include препроцессора языка С). Unisan реализован на языке C++. На данный момент имеется версия для платформы Win32, хотя, при необходимости, возможен его перенос на другие платформы.
Для генерации промежуточного представления программы в Unisan реализован механизм, позволяющий в описание грамматики включать конструкции, описывающие синтаксическое дерево.
Для сохранения отладочной информации разработан формат ESDI, обеспечивающий высокую скорость сохранения и загрузки программы и являющийся универсальным для различных платформ. Реализована библиотека для работы с этим форматом. Формат ESDI поддерживается средой проектирования и отладки программного обеспечения встроенных систем WInter [6] и средой высокоуровневого проектирования цифровых устройств IEESD [6].
Система Unisan используется в Гомельском государственном университете для разработки настраиваемого на целевую платформу компилятора языков высокого уровня, анализатора языка Vhdl, анализатора описания тестов для системы IEESD, настраиваемого транслятора языка ассемблера, а также других проектах.